﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using fadmin.util;
using System.Data.SqlClient;
using System.Data;
using fadmin.Produtos;

namespace fadmin.Produto
{
    class ProdutoDAO : BaseDAO
    {
        //CONSULTAR
        public List<ProdutoDTO> consultar(ProdutoDTO produto)
        {
            List<ProdutoDTO> retorno = new List<ProdutoDTO>();
            ProdutoDTO dto = new ProdutoDTO();

            SqlConnection con = null;
            string strProvider = base.GetStringConexao();
            string strSql = "select * from Produto where 1=1";

            if (!(produto.nome == null))
            {
                strSql = strSql + " and nome like '%' + @nome + '%' ";
            }

            if (!(produto.codigo_produto == 0))
            {
                strSql = strSql + " and codigo_produto like @codigo";
            }

            if (!(produto.situacao == null))
            {
                strSql = strSql + " and situacao like @situacao";
            }
            strSql = strSql + " order by situacao desc,nome";

            con = new SqlConnection(strProvider);
            SqlCommand cmd = new SqlCommand(strSql, con);

            base.AdicionarParametro(ref cmd, "@nome", SqlDbType.VarChar, produto.nome);
            base.AdicionarParametro(ref cmd, "@codigo", SqlDbType.Int, Convert.ToInt32(produto.codigo_produto));
            base.AdicionarParametro(ref cmd, "@situacao", SqlDbType.VarChar, produto.situacao);

            con.Open();
            cmd.CommandType = CommandType.Text;
            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                ProdutoDTO dtoProduto = new ProdutoDTO();
                dtoProduto.codigo_produto = Convert.ToInt32(reader["codigo_produto"]);
                dtoProduto.nome = (String)(reader["nome"]);
                dtoProduto.situacao = (String)(reader["situacao"]);
                dtoProduto.preco = Convert.ToDouble((reader["preco"]));
                dtoProduto.datacadastro = Convert.ToDateTime(reader["datacadastro"]);

                if (!((reader["descricao"]).ToString().Trim().Equals("")))
                {
                    dtoProduto.descricao = (String)(reader["descricao"]);
                }
                else
                {
                    dtoProduto.descricao = "Sem Descrição";
                }

                retorno.Add(dtoProduto);
            }

            reader.Close();
            con.Close();
            return retorno;
        }

        //Inserir Produto
        public void inserir(ProdutoDTO Produto)
        {
            SqlConnection con = null;
            string strProvider = base.GetStringConexao();
            string strSql = SQL.inserir;

            con = new SqlConnection(strProvider);
            SqlCommand cmd = new SqlCommand(strSql, con);

            base.AdicionarParametro(ref cmd, "@nome", SqlDbType.VarChar, Produto.nome);
            base.AdicionarParametro(ref cmd, "@descricao", SqlDbType.VarChar, Produto.descricao);
            base.AdicionarParametro(ref cmd, "@preco", SqlDbType.Float, Produto.preco);
            base.AdicionarParametro(ref cmd, "@datacadastro", SqlDbType.DateTime, Produto.datacadastro);
            base.AdicionarParametro(ref cmd, "@situacao", SqlDbType.VarChar, Produto.situacao);
            
            con.Open();
            cmd.CommandType = CommandType.Text;
            cmd.ExecuteNonQuery();
            con.Close();

        }

        //Atualizar produto
        public void atualizar(ProdutoDTO Produto)
        {
            SqlConnection con = null;
            string strProvider = base.GetStringConexao();
            string strSql = SQL.atualizar;

            con = new SqlConnection(strProvider);
            SqlCommand cmd = new SqlCommand(strSql, con);

            base.AdicionarParametro(ref cmd, "@nome", SqlDbType.VarChar, Produto.nome);
            base.AdicionarParametro(ref cmd, "@descricao", SqlDbType.VarChar, Produto.descricao);
            base.AdicionarParametro(ref cmd, "@preco", SqlDbType.Float, Produto.preco);
            base.AdicionarParametro(ref cmd, "@situacao", SqlDbType.VarChar, Produto.situacao);
            base.AdicionarParametro(ref cmd, "@codigo", SqlDbType.VarChar, Produto.codigo_produto);

            con.Open();
            cmd.CommandType = CommandType.Text;
            cmd.ExecuteNonQuery();
            con.Close();

        }
    }
}
